CSS3 实现折纸角效果

前两天去了一次 html5 分享沙龙,突然对 css3 的一些效果感兴趣起来。写了一个折纸角效果。

用到的主要是css3中旋转的属性rotate,还有强大的background中linear-gradient属性。

整个折角由两个部分组成,一个是折角体,一个是用来遮挡背景的块。

用到的主要是属性是linear-gradient,将矩形块的背景设置成以对角线分开,一边是背景色(紫色),一边是纸条的颜色。

然后利用rotate,将它旋转。

然后定位到合适位置,这样,就是一个折角了。

最后用小块把多余的背景盖住。一个折角就做好了。

这个做法的优点:用css伪类before和after生成折角,html结构中没有多余元素,干净。

缺点:在折角的上方会多出来一块,如不设置好margin-top,则会挡住其他元素,露馅。

以下是实现方法及demo,这里是源码:css3_paper_corner_effect





第一步:做一个方框,利用linear-gradient属性,将矩形块的背景设置成以对角线分开,一边是背景色(紫色),一边是纸条的颜色(黄色)。两个渐变色的起始点设置成同一点,即50%,这样就可以在二分之一处颜色突变,从而产生一条明显的分界线的效果。然后用-150deg,把这条颜色分界线旋转为对角线。这里为了方便看清方块,将边框设置了1px



第二步:利用rotate,将它旋转,并且加上阴影。



第三步:放到大的div中,调整位置。


黄色纸条

第四步:加上一个块,把多余的背景盖住


黄色纸条

OK!隐藏掉这些块的border之后就大功告成啦!


CSS3实现折角Demo


黄色纸条

绿色纸条

红色纸条

以下是相关代码

css部分:

.bg_purple{background-color:#CFCFFF;margin:15px auto;padding:20px;}
.bg_purple h1{text-align:center;}
.bg_purple .tips{width:300px;height:100px;margin:25px auto;text-align:center;line-height:100px;font-size:24px;font-weight:bold;position:relative;}
.bg_purple .conner{display:block;position:relative;}
.bg_purple .conner:after{content:"";-moz-transform:rotate(-30deg);-webkit-transform:rotate(-30deg);background:-moz-linear-gradient(-150deg,#CFCFFF 50%,#FFFFA9 50%) repeat scroll 0 0 transparent;background:-webkit-linear-gradient(-150deg,#CFCFFF 50%,#FFFFA9 50%) repeat scroll 0 0 transparent;height:70px;width:40px;position:absolute;right:14px;top:-15px;box-shadow:-4px 4px 3px -3px #000000;}
.bg_purple .conner:before{content:"";background-color:#CFCFFF;height:40px;width:40px;position:absolute;right:0;top:0;}
.bg_purple .yellow{background-color:#FFFFA9;}
.bg_purple .yellow:after{background:-moz-linear-gradient(-150deg,#CFCFFF 50%,#FFFFA9 50%) repeat scroll 0 0 transparent;background:-webkit-linear-gradient(-150deg,#CFCFFF 50%,#FFFFA9 50%) repeat scroll 0 0 transparent;}
.bg_purple .green{background-color:#CFFFCF;}
.bg_purple .green:after{background:-moz-linear-gradient(-150deg,#CFCFFF 50%,#CFFFCF 50%) repeat scroll 0 0 transparent;background:-webkit-linear-gradient(-150deg,#CFCFFF 50%,#CFFFCF 50%) repeat scroll 0 0 transparent;}
.bg_purple .red{background-color:#FFCFCF;}
.bg_purple .red:after{background:-moz-linear-gradient(-150deg,#CFCFFF 50%,#FFCFCF 50%) repeat scroll 0 0 transparent;background:-webkit-linear-gradient(-150deg,#CFCFFF 50%,#FFCFCF 50%) repeat scroll 0 0 transparent;}

html部分十分简洁:

<div class="bg_purple" >
    <h1>CSS3实现折角Demo</h1>
    <div class="tips conner yellow" >黄色纸条</div>
    <div class="tips conner green" >绿色纸条</div>
    <div class="tips conner red" >红色纸条</div>
</div>